package tp1POO.Persistencia;

import tp1POO.Modelo.Cliente;
import tp1POO.Modelo.Locacao;
import tp1POO.Modelo.ObjetoPOO;
import tp1POO.Modelo.Veiculo;

public class LocacaoDAOTexto extends DAOTexto {

	/**
	 * Salva objeto do tipo Locacao no arquivo texto
	 * @param parObj objeto a ser salvo
	 */
	@Override
	public void salvar(ObjetoPOO parObj) {
		Locacao parLocacao = (Locacao) parObj;
		if (parLocacao == null)
			return;

		String tmpValue;
		tmpValue = parLocacao.getIdentifier() + FileManager.getSeparator() +
		parLocacao.getDataDevolucao() + FileManager.getSeparator() +
		parLocacao.getDataSaida() + FileManager.getSeparator() +
		parLocacao.getTipoLocacao() + FileManager.getSeparator() +
		parLocacao.getValor() + FileManager.getSeparator() +
		parLocacao.getKmEntrada() + FileManager.getSeparator() +
		parLocacao.getKmSaida() + FileManager.getSeparator() +
		parLocacao.getPrevisaoDias() + FileManager.getSeparator() +
		parLocacao.getLocador().getIdentifier() + FileManager.getSeparator() +
		parLocacao.getMotoristas().toString() + FileManager.getSeparator() +
		parLocacao.getVeiculo().getIdentifier();
		//Salvando objetos intermediarios
		GerenciadorObjetos.obterInstancia().salvarObj(parLocacao.getLocador());
		GerenciadorObjetos.obterInstancia().salvarObj(parLocacao.getVeiculo());
		GerenciadorObjetos.obterInstancia().salvarObjs(parLocacao.getMotoristas().toArray(new ObjetoPOO[0]));

		//Salvando objeto
		gestor.SalvarObjeto(tmpValue, parLocacao.getClass().getSimpleName());
	}
	/**
	 * Converte uma string em um ObjetoPOO do tipo Locacao
	 * @param parString String a ser convertida
	 * @return um objeto construido de acordo com seu tipo
	 */
	@Override
	public ObjetoPOO converterObj(String parString) {
		if (parString != null && parString.length() > 0)
		{
			parString = parString.replace("null", "0");
			String s[] = parString.split(FileManager.getSeparator());
			Cliente cli = (Cliente)GerenciadorObjetos.obterInstancia().obterObj(new Cliente(s[8]));
			Veiculo veic = (Veiculo)GerenciadorObjetos.obterInstancia().obterObj(new Veiculo(s[10]));
			Locacao loc = new Locacao(veic, cli);
			loc.setDataSaida(s[2]);
			loc.setDataDevolucao(s[1]);
			loc.setTipoLocacao(s[3]);
			loc.setValor(Float.parseFloat(s[4]));
			loc.setKmEntrada(Integer.parseInt(s[5]));
			loc.setKmSaida(Integer.parseInt(s[6]));
			loc.setPrevisaoDias(Integer.parseInt(s[7]));

			return loc;
		}
		return null;
	}
}
